فرض کن تو یه کتابخونه بزرگ هستی و دنبال یه کتاب خاص میگردی. چهار تا راه داری: از فهرست راهنما (which)، از کاتالوگ کامل (whereis)، از سیستم امانت (locate) که سریعه ولی ممکنه قدیمی باشه، یا رفتن بین قفسهها (find) که دقیق و بهروزه ولی کندتره. هرکدوم برای یه کار خاصی مناسبه!
در لینوکس، ابزارهای مختلفی برای جستجوی فایلها، دستورات و محتوا وجود دارند. هر کدام از این ابزارها مزایا و معایب خاص خود را دارند و برای کاربردهای متفاوتی طراحی شدهاند. در این جلسه با چهار ابزار اصلی جستجو آشنا میشویم:
which → پیدا کردن مسیر دستوراتwhereis → پیدا کردن مسیر دستورات + man pages + sourcelocate → جستجوی سریع با استفاده از دیتابیسfind → جستجوی قدرتمند و بهروز با گزینههای پیشرفتهwhich
which مسیر کامل یک دستور اجرایی را در سیستم پیدا میکند. این دستور از متغیر محیطی PATH برای جستجو استفاده میکند.
توضیح: which فقط اولین مسیری که در PATH پیدا میکند را نمایش میدهد.
اگر چندین نسخه از یک دستور در سیستم نصب باشد، which فقط اولین نسخه را نشان میدهد.
whereis
whereis علاوه بر مسیر فایل اجرایی، صفحه راهنما (man page) و کد منبع (source code) دستور را نیز نمایش میدهد.
توضیح:
/usr/bin/ls)/usr/share/man/man1/ls.1.gz)
whereis برای پیدا کردن همه چیز مربوط به یک دستور بسیار مفید است.
locate
locate یک ابزار جستجوی سریع است که از یک دیتابیس برای پیدا کردن فایلها استفاده میکند. این دیتابیس معمولاً در مسیر /var/lib/plocate/plocate.db (در سیستمهای جدید) یا /var/lib/mlocate/mlocate.db قرار دارد.
توضیح: locate همه فایلهایی که شامل .bashrc هستند را نمایش میدهد.
sudo updatedb استفاده کنید.find
find قدرتمندترین و دقیقترین ابزار جستجو در لینوکس است. این دستور بهصورت لحظهای در سیستم فایل جستجو میکند و همیشه بهروز است. با استفاده از گزینههای مختلف، میتوانید جستجوهای بسیار پیشرفتهای انجام دهید.
find:
توضیح: پیدا کردن همه فایلهای /usr/bin که دارای SUID (مجوز ۴۰۰۰) هستند.
توضیح: پیدا کردن فایلهای .txt فقط تا عمق ۲ سطح از دایرکتوری جاری.
توضیح: پیدا کردن همه فایلهای .txt در دایرکتوری جاری و زیردایرکتوریها.
find| گزینه | توضیح |
|---|---|
-name "pattern" |
جستجو بر اساس نام (حساس به حروف بزرگ/کوچک) |
-iname "pattern" |
جستجو بر اساس نام (بدون حساسیت به حروف) |
-type f/d/l |
نوع فایل (f=معمولی، d=دایرکتوری، l=لینک) |
-size +100M |
فایلهای بزرگتر از ۱۰۰ مگابایت |
-mtime -7 |
فایلهای تغییر یافته در ۷ روز اخیر |
-perm /4000 |
فایلهای با SUID |
-maxdepth N |
حداکثر عمق جستجو (N سطح) |
-exec command {} \; |
اجرای دستور روی فایلهای پیدا شده |
find
توضیح: پیدا کردن فایلهای لاگ (.log) در /var/log که بیش از ۳۰ روز از تغییرشان گذشته است.
توضیح: پیدا کردن فایلهای بزرگتر از ۱۰ مگابایت و نمایش جزئیات آنها با ls -lh.
پاسخ به این سوال بستگی به نیاز شما دارد:
which یا whereis استفاده کنید.
locate استفاده کنید.
find استفاده کنید.
find به دلیل قابلیتهای پیشرفته، دقت بالا و بهروز بودن، بهترین ابزار برای جستجوی حرفهای در لینوکس است.
| ویژگی | which |
whereis |
locate |
find |
|---|---|---|---|---|
| سرعت | ⚡⚡⚡ سریع | ⚡⚡ سریع | ⚡⚡⚡⚡ خیلی سریع | ⚡ کند (برای جستجوی وسیع) |
| دقت | متوسط | متوسط | پایین (وابسته به دیتابیس) | ⭐ بالا |
| بهروز بودن | ✅ لحظهای | ✅ لحظهای | ❌ وابسته به updatedb |
✅ لحظهای |
| جستجوی محتوا | ❌ خیر | ❌ خیر | ❌ خیر (فقط نام) | ✅ بله (با -exec و grep) |
| پشتیبانی از الگو | ❌ خیر | ❌ خیر | ✅ بله (با --regex) |
✅ بله (با -regex) |
| کاربرد اصلی | پیدا کردن مسیر دستورات | پیدا کردن مسیر دستورات + man | جستجوی سریع فایلها | جستجوی پیشرفته و دقیق |
which مسیر دستورات bash، python و grep را پیدا کنید.whereis اطلاعات کامل دستور ls را مشاهده کنید.locate همه فایلهای .conf سیستم را پیدا کنید.find همه فایلهای .txt در دایرکتوری خانه خود را پیدا کنید.find فایلهای بزرگتر از ۵۰ مگابایت را در سیستم پیدا کنید.